package cn.iocoder.yudao.module.resource.service.material;

import cn.iocoder.yudao.module.resource.dal.dataobject.material.ResourceMaterialDO;

import javax.validation.Valid;
import java.util.List;

/**
 * 资源素材 Service 接口
 *
 * @author 芋道源码
 */
public interface ResourceMaterialService {

    /**
     * 创建资源素材
     *
     * @param materialDO 资源素材信息
     * @return 资源ID
     */
    Long createMaterial(@Valid ResourceMaterialDO materialDO);

    /**
     * 更新资源素材
     *
     * @param materialDO 资源素材信息
     */
    void updateMaterial(@Valid ResourceMaterialDO materialDO);

    /**
     * 删除资源素材
     *
     * @param id 资源ID
     */
    void deleteMaterial(Long id);

    /**
     * 获得资源素材
     *
     * @param id 资源ID
     * @return 资源素材
     */
    ResourceMaterialDO getMaterial(Long id);

    /**
     * 获得资源素材列表
     *
     * @param ids 资源ID列表
     * @return 资源素材列表
     */
    List<ResourceMaterialDO> getMaterialList(List<Long> ids);

    /**
     * 根据创作者ID获得资源列表
     *
     * @param creatorId 创作者ID
     * @return 资源素材列表
     */
    List<ResourceMaterialDO> getMaterialListByCreatorId(Long creatorId);

    /**
     * 审核资源素材
     *
     * @param id 资源ID
     * @param status 审核状态
     * @param auditRemark 审核备注
     */
    void auditMaterial(Long id, Integer status, String auditRemark);

    /**
     * 增加下载次数
     *
     * @param id 资源ID
     */
    void incrementDownloadCount(Long id);

    /**
     * 增加收藏次数
     *
     * @param id 资源ID
     */
    void incrementCollectCount(Long id);

    /**
     * 增加浏览次数
     *
     * @param id 资源ID
     */
    void incrementViewCount(Long id);

}
